package com.lcx.movie.service.impl;

import com.lcx.movie.entity.Hall;
import com.lcx.movie.entity.Movie;
import com.lcx.movie.entity.Orderinfo;
import com.lcx.movie.mapper.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lcx.movie.entity.Schedule;
import com.lcx.movie.mapper.ScheduleMapper;
import com.lcx.movie.service.ScheduleService;

import java.util.List;

/**
 * @Description   场次实现类
 * @version 1.0 
 * @author lcx
 * @date 2025/2/9 11:25
 */
@Service
public class ScheduleServiceImpl extends ServiceImpl<ScheduleMapper, Schedule> implements ScheduleService{
    @Autowired
    private ScheduleMapper scheduleMapper;
    @Autowired
    private CinemaMapper cinemaMapper;
    @Autowired
    private HallMapper hallMapper;
    @Autowired
    private MovieMapper movieMapper;
    @Autowired
    private OrderinfoMapper orderinfoMapper;
    /**
     * 分页查询所有场次信息[后台管理]
     * @param movieCnName 电影名称
     * @return 场次数据集合
     */
    @Override
    public List<Schedule> selectPageBySchedule(String movieCnName) {
        return scheduleMapper.selectPageBySchedule(movieCnName);
    }
    /**
     * 添加场次
     * @param schedule 场次实体
     * @return 受影响的行数
     */
    @Override
    public int insertSchedule(Schedule schedule) {
        return scheduleMapper.insertSchedule(schedule);
    }

    /**
     * 根据影院id和影片id查询场次
     * @param cinemaId 影院id
     * @param movieId 电影id
     * @return 场次集合
     */
    @Override
public List<Schedule> findScheduleByCineamIdAndMovieId(long cinemaId, long movieId) {
    /**
     * 根据影院 ID 和电影 ID 查询排片信息，并补充排片关联的影厅和电影详情。
     *
     * @param cinemaId 影院 ID
     * @param movieId  电影 ID
     * @return 包含完整影厅和电影信息的排片列表
     */

    // 查询符合条件的排片列表
    List<Schedule> list = this.scheduleMapper.findScheduleByCinemaAndMovie(cinemaId, movieId);

    // 遍历排片列表，补充每个排片的影厅和电影信息
    for (Schedule schedule : list) {
        // 根据排片中的影厅 ID 查询影厅详情
        Hall hall = this.hallMapper.findHallById(schedule.getHallId());

        // 根据影厅中的影院 ID 查询影院详情，并设置到影厅对象中
        hall.setHallCinema(this.cinemaMapper.findCinemaById(hall.getCinemaId()));

        // 将补充完整的影厅信息设置到排片对象中
        schedule.setScheduleHall(hall);

        // 根据排片中的电影 ID 查询电影详情，并设置到排片对象中
        schedule.setScheduleMovie(this.movieMapper.findMovieById(schedule.getMovieId()));
    }

    // 返回包含完整信息的排片列表
    return list;
}



    /**
     * 根据影厅id查询所有的场次
     * @param hallId 影厅id
     * @return 场次集合
     */
    public List<Schedule> selectScheduleByHallId(Integer hallId){
        return scheduleMapper.selectScheduleByHallId(hallId);
    }
    /**
     * 根据场次id删除场次
     * @param scheduleId 场次id
     * @return 受影响的行数
     */

    @Override
    public int deleteSchedule(Integer scheduleId) {
        return scheduleMapper.deleteSchedule(scheduleId);
    }
    /**
     * 修改场次信息
     * @param schedule 场次实体
     * @return 受影响的行数
     */
    @Override
    public int updateSchedule(Schedule schedule) {
        return scheduleMapper.updateSchedule(schedule);
    }

    /**
     * 根据场次id查询场次信息
     * @param scheduleId 场次id
     * @return 场次对象
     */

    @Override
    public Schedule findScheduleById(long scheduleId){
        System.out.println("scheduleId = " + scheduleId);
        Schedule schedule = scheduleMapper.findScheduleById(scheduleId);
        Hall hall = hallMapper.findHallById(schedule.getHallId());
        schedule.setScheduleHall(hall);
        hall.setHallCinema(cinemaMapper.findCinemaById(hall.getCinemaId()));
        schedule.setScheduleMovie(movieMapper.findMovieById(schedule.getMovieId()));
        List<Orderinfo> orderList = orderinfoMapper.selectScheduleById(scheduleId);
        for (Orderinfo orderinfo : orderList){
            System.out.println("orderinfo = " + orderinfo);
        }
        schedule.setOrderList(orderList);
        return schedule;
    }

    /**
     * 分页查询平台场次管理
     * @return 场次集合
     */
    @Override
    public List<Schedule> selectSchedulePage(@Param("cinemaName")String cinemaName,
                                             @Param("hallName") String hallName) {
        return this.baseMapper.selectSchedulePage(cinemaName,hallName);
    }

    /**
     * 平台新增场次
     * @param schedule 场次对象
     * @return 受影响的行数
     */
    @Override
    public int addSchedule(Schedule schedule) {
        return this.baseMapper.addSchedule(schedule);
    }

    /**
     * 平台根据id删除场次
     * @param scheduleId 场次id
     * @return 字符串提示信息
     */
    @Override
    public String removeScheduleId(Integer scheduleId) {
        return this.baseMapper.removeScheduleId(scheduleId)>0?"删除成功":"删除失败";
    }
}
